package cn.learn.utils.random;

import org.apache.commons.lang3.RandomUtils;

import java.text.DecimalFormat;
import java.util.Random;

/**
 * 数据生成数字
 *
 * @author huangyezhan
 * @version 1.0
 * @date 2020年10月17日10:22
 */
public class RandomNumUtil {

    private RandomNumUtil() {
    }

    private static final Random random = new Random();

    /**
     * @param multiple 获取多少位整数
     * @param format   输出格式
     * @return 返回字符串的浮点数值
     */
    public static double getDouble(int multiple, String format) {
        multiple = multiple > 0 ? multiple : 1;
        int    i = (int) Math.pow(10, multiple);
        double v = random.nextDouble() * i;
        //#.00表示保留后两位，它的处理方式是直接截掉不要的尾数，不四舍五入。
        if (format != null) {
            DecimalFormat data = new DecimalFormat(format);
            return Double.parseDouble(data.format(v));
        }
        return v;
    }

    /**
     * 默认小数点取两位
     *
     * @param multiple 获取多少位整数
     * @return 返回结果
     */
    public static double getDouble(int multiple) {
        return getDouble(multiple, "#.00");
    }

    /**
     * 生成有界限的double数
     *
     * @param min 开始数值
     * @param max 结束数值
     * @return 返回结果
     */
    public static double getDouble(double min, double max) {
        return RandomUtils.nextDouble(Math.min(min, max), Math.max(min, max));
    }

    /**
     * 生成有界限的整数
     *
     * @param min 开始数值
     * @param max 结束数值
     * @return 返回结果
     */
    public static int getInteger(int min, int max) {
        if (min == max) {
            return max;
        }
        return RandomUtils.nextInt(Math.min(min, max), Math.max(min, max));
    }

    /**
     * 生成 0--v 的数值
     *
     * @param v 指定的上限数字
     * @return 返回结果
     */
    public static int getInteger(int v) {
        if (v < 1) {
            return v;
        }
        return random.nextInt(v);
    }

    public static int getInteger(){
        return random.nextInt();
    }

}
